package com.gimi.cloud.bbp.common.utils.oss;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.ListObjectsRequest;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class AliOSSUtil {

	private static String[] contentTypes = { ".load:text/html", ".123:application/vnd.lotus-1-2-3", ".3ds:image/x-3ds",
			".3g2:video/3gpp", ".3ga:video/3gpp", ".3gp:video/3gpp", ".3gpp:video/3gpp", ".602:application/x-t602",
			".669:audio/x-mod", ".7z:application/x-7z-compressed", ".a:application/x-archive", ".aac:audio/mp4",
			".abw:application/x-abiword", ".abw.crashed:application/x-abiword", ".abw.gz:application/x-abiword",
			".ac3:audio/ac3", ".ace:application/x-ace", ".adb:text/x-adasrc", ".ads:text/x-adasrc",
			".afm:application/x-font-afm", ".ag:image/x-applix-graphics", ".ai:application/illustrator",
			".aif:audio/x-aiff", ".aifc:audio/x-aiff", ".aiff:audio/x-aiff", ".al:application/x-perl",
			".alz:application/x-alz", ".amr:audio/amr", ".ani:application/x-navi-animation", ".anim[1-9j]:video/x-anim",
			".anx:application/annodex", ".ape:audio/x-ape", ".arj:application/x-arj", ".arw:image/x-sony-arw",
			".as:application/x-applix-spreadsheet", ".asc:text/plain", ".asf:video/x-ms-asf", ".asp:application/x-asp",
			".ass:text/x-ssa", ".asx:audio/x-ms-asx", ".atom:application/atom+xml", ".au:audio/basic",
			".avi:video/x-msvideo", ".aw:application/x-applix-word", ".awb:audio/amr-wb", ".awk:application/x-awk",
			".axa:audio/annodex", ".axv:video/annodex", ".bak:application/x-trash", ".bcpio:application/x-bcpio",
			".bdf:application/x-font-bdf", ".bib:text/x-bibtex", ".bin:application/octet-stream",
			".blend:application/x-blender", ".blender:application/x-blender", ".bmp:image/bmp",
			".bz:application/x-bzip", ".bz2:application/x-bzip", ".c:text/x-csrc", ".c++:text/x-c++src",
			".cab:application/vnd.ms-cab-compressed", ".cb7:application/x-cb7", ".cbr:application/x-cbr",
			".cbt:application/x-cbt", ".cbz:application/x-cbz", ".cc:text/x-c++src", ".cdf:application/x-netcdf",
			".cdr:application/vnd.corel-draw", ".cer:application/x-x509-ca-cert", ".cert:application/x-x509-ca-cert",
			".cgm:image/cgm", ".chm:application/x-chm", ".chrt:application/x-kchart", ".class:application/x-java",
			".cls:text/x-tex", ".cmake:text/x-cmake", ".cpio:application/x-cpio",
			".cpio.gz:application/x-cpio-compressed", ".cpp:text/x-c++src", ".cr2:image/x-canon-cr2",
			".crt:application/x-x509-ca-cert", ".crw:image/x-canon-crw", ".cs:text/x-csharp", ".csh:application/x-csh",
			".css:text/css", ".cssl:text/css", ".csv:text/csv", ".cue:application/x-cue", ".cur:image/x-win-bitmap",
			".cxx:text/x-c++src", ".d:text/x-dsrc", ".dar:application/x-dar", ".dbf:application/x-dbf",
			".dc:application/x-dc-rom", ".dcl:text/x-dcl", ".dcm:application/dicom", ".dcr:image/x-kodak-dcr",
			".dds:image/x-dds", ".deb:application/x-deb", ".der:application/x-x509-ca-cert",
			".desktop:application/x-desktop", ".dia:application/x-dia-diagram", ".diff:text/x-patch",
			".divx:video/x-msvideo", ".djv:image/vnd.djvu", ".djvu:image/vnd.djvu", ".dng:image/x-adobe-dng",
			".doc:application/msword", ".docbook:application/docbook+xml",
			".docm:application/vnd.openxmlformats-officedocument.wordprocessingml.document",
			".docx:application/vnd.openxmlformats-officedocument.wordprocessingml.document", ".dot:text/vnd.graphviz",
			".dsl:text/x-dsl", ".dtd:application/xml-dtd", ".dtx:text/x-tex", ".dv:video/dv", ".dvi:application/x-dvi",
			".dvi.bz2:application/x-bzdvi", ".dvi.gz:application/x-gzdvi", ".dwg:image/vnd.dwg", ".dxf:image/vnd.dxf",
			".e:text/x-eiffel", ".egon:application/x-egon", ".eif:text/x-eiffel", ".el:text/x-emacs-lisp",
			".emf:image/x-emf", ".emp:application/vnd.emusic-emusic_package",
			".ent:application/xml-external-parsed-entity", ".eps:image/x-eps", ".eps.bz2:image/x-bzeps",
			".eps.gz:image/x-gzeps", ".epsf:image/x-eps", ".epsf.bz2:image/x-bzeps", ".epsf.gz:image/x-gzeps",
			".epsi:image/x-eps", ".epsi.bz2:image/x-bzeps", ".epsi.gz:image/x-gzeps", ".epub:application/epub+zip",
			".erl:text/x-erlang", ".es:application/ecmascript", ".etheme:application/x-e-theme", ".etx:text/x-setext",
			".exe:application/x-ms-dos-executable", ".exr:image/x-exr", ".ez:application/andrew-inset",
			".f:text/x-fortran", ".f90:text/x-fortran", ".f95:text/x-fortran", ".fb2:application/x-fictionbook+xml",
			".fig:image/x-xfig", ".fits:image/fits", ".fl:application/x-fluid", ".flac:audio/x-flac",
			".flc:video/x-flic", ".fli:video/x-flic", ".flv:video/x-flv", ".flw:application/x-kivio",
			".fo:text/x-xslfo", ".for:text/x-fortran", ".g3:image/fax-g3", ".gb:application/x-gameboy-rom",
			".gba:application/x-gba-rom", ".gcrd:text/directory", ".ged:application/x-gedcom",
			".gedcom:application/x-gedcom", ".gen:application/x-genesis-rom", ".gf:application/x-tex-gf",
			".gg:application/x-sms-rom", ".gif:image/gif", ".glade:application/x-glade",
			".gmo:application/x-gettext-translation", ".gnc:application/x-gnucash", ".gnd:application/gnunet-directory",
			".gnucash:application/x-gnucash", ".gnumeric:application/x-gnumeric", ".gnuplot:application/x-gnuplot",
			".gp:application/x-gnuplot", ".gpg:application/pgp-encrypted", ".gplt:application/x-gnuplot",
			".gra:application/x-graphite", ".gsf:application/x-font-type1", ".gsm:audio/x-gsm",
			".gtar:application/x-tar", ".gv:text/vnd.graphviz", ".gvp:text/x-google-video-pointer",
			".gz:application/x-gzip", ".h:text/x-chdr", ".h++:text/x-c++hdr", ".hdf:application/x-hdf",
			".hh:text/x-c++hdr", ".hp:text/x-c++hdr", ".hpgl:application/vnd.hp-hpgl", ".hpp:text/x-c++hdr",
			".hs:text/x-haskell", ".htm:text/html", ".html:text/html", ".hwp:application/x-hwp",
			".hwt:application/x-hwt", ".hxx:text/x-c++hdr", ".ica:application/x-ica", ".icb:image/x-tga",
			".icns:image/x-icns", ".ico:image/vnd.microsoft.icon", ".ics:text/calendar", ".idl:text/x-idl",
			".ief:image/ief", ".iff:image/x-iff", ".ilbm:image/x-ilbm", ".ime:text/x-imelody", ".imy:text/x-imelody",
			".ins:text/x-tex", ".iptables:text/x-iptables", ".iso:application/x-cd-image",
			".iso9660:application/x-cd-image", ".it:audio/x-it", ".j2k:image/jp2",
			".jad:text/vnd.sun.j2me.app-descriptor", ".jar:application/x-java-archive", ".java:text/x-java",
			".jng:image/x-jng", ".jnlp:application/x-java-jnlp-file", ".jp2:image/jp2", ".jpc:image/jp2",
			".jpe:image/jpeg", ".jpeg:image/jpeg", ".jpf:image/jp2", ".jpg:image/jpeg",
			".jpr:application/x-jbuilder-project", ".jpx:image/jp2", ".js:application/javascript",
			".json:application/json", ".jsonp:application/jsonp", ".k25:image/x-kodak-k25", ".kar:audio/midi",
			".karbon:application/x-karbon", ".kdc:image/x-kodak-kdc", ".kdelnk:application/x-desktop",
			".kexi:application/x-kexiproject-sqlite3", ".kexic:application/x-kexi-connectiondata",
			".kexis:application/x-kexiproject-shortcut", ".kfo:application/x-kformula",
			".kil:application/x-killustrator", ".kino:application/smil", ".kml:application/vnd.google-earth.kml+xml",
			".kmz:application/vnd.google-earth.kmz", ".kon:application/x-kontour", ".kpm:application/x-kpovmodeler",
			".kpr:application/x-kpresenter", ".kpt:application/x-kpresenter", ".kra:application/x-krita",
			".ksp:application/x-kspread", ".kud:application/x-kugar", ".kwd:application/x-kword",
			".kwt:application/x-kword", ".la:application/x-shared-library-la", ".latex:text/x-tex", ".ldif:text/x-ldif",
			".lha:application/x-lha", ".lhs:text/x-literate-haskell", ".lhz:application/x-lhz", ".log:text/x-log",
			".ltx:text/x-tex", ".lua:text/x-lua", ".lwo:image/x-lwo", ".lwob:image/x-lwo", ".lws:image/x-lws",
			".ly:text/x-lilypond", ".lyx:application/x-lyx", ".lz:application/x-lzip", ".lzh:application/x-lha",
			".lzma:application/x-lzma", ".lzo:application/x-lzop", ".m:text/x-matlab", ".m15:audio/x-mod",
			".m2t:video/mpeg", ".m3u:audio/x-mpegurl", ".m3u8:audio/x-mpegurl", ".m4:application/x-m4",
			".m4a:audio/mp4", ".m4b:audio/x-m4b", ".m4v:video/mp4", ".mab:application/x-markaby",
			".man:application/x-troff-man", ".mbox:application/mbox", ".md:application/x-genesis-rom",
			".mdb:application/vnd.ms-access", ".mdi:image/vnd.ms-modi", ".me:text/x-troff-me", ".med:audio/x-mod",
			".metalink:application/metalink+xml", ".mgp:application/x-magicpoint", ".mid:audio/midi",
			".midi:audio/midi", ".mif:application/x-mif", ".minipsf:audio/x-minipsf", ".mka:audio/x-matroska",
			".mkv:video/x-matroska", ".ml:text/x-ocaml", ".mli:text/x-ocaml", ".mm:text/x-troff-mm",
			".mmf:application/x-smaf", ".mml:text/mathml", ".mng:video/x-mng", ".mo:application/x-gettext-translation",
			".mo3:audio/x-mo3", ".moc:text/x-moc", ".mod:audio/x-mod", ".mof:text/x-mof", ".moov:video/quicktime",
			".mov:video/quicktime", ".movie:video/x-sgi-movie", ".mp+:audio/x-musepack", ".mp2:video/mpeg",
			".mp3:audio/mpeg", ".mp4:video/mp4", ".mpc:audio/x-musepack", ".mpe:video/mpeg", ".mpeg:video/mpeg",
			".mpg:video/mpeg", ".mpga:audio/mpeg", ".mpp:audio/x-musepack", ".mrl:text/x-mrml", ".mrml:text/x-mrml",
			".mrw:image/x-minolta-mrw", ".ms:text/x-troff-ms", ".msi:application/x-msi", ".msod:image/x-msod",
			".msx:application/x-msx-rom", ".mtm:audio/x-mod", ".mup:text/x-mup", ".mxf:application/mxf",
			".n64:application/x-n64-rom", ".nb:application/mathematica", ".nc:application/x-netcdf",
			".nds:application/x-nintendo-ds-rom", ".nef:image/x-nikon-nef", ".nes:application/x-nes-rom",
			".nfo:text/x-nfo", ".not:text/x-mup", ".nsc:application/x-netshow-channel", ".nsv:video/x-nsv",
			".o:application/x-object", ".obj:application/x-tgif", ".ocl:text/x-ocl", ".oda:application/oda",
			".odb:application/vnd.oasis.opendocument.database", ".odc:application/vnd.oasis.opendocument.chart",
			".odf:application/vnd.oasis.opendocument.formula", ".odg:application/vnd.oasis.opendocument.graphics",
			".odi:application/vnd.oasis.opendocument.image", ".odm:application/vnd.oasis.opendocument.text-master",
			".odp:application/vnd.oasis.opendocument.presentation",
			".ods:application/vnd.oasis.opendocument.spreadsheet", ".odt:application/vnd.oasis.opendocument.text",
			".oga:audio/ogg", ".ogg:video/x-theora+ogg", ".ogm:video/x-ogm+ogg", ".ogv:video/ogg",
			".ogx:application/ogg", ".old:application/x-trash", ".oleo:application/x-oleo", ".opml:text/x-opml+xml",
			".ora:image/openraster", ".orf:image/x-olympus-orf",
			".otc:application/vnd.oasis.opendocument.chart-template", ".otf:application/x-font-otf",
			".otg:application/vnd.oasis.opendocument.graphics-template",
			".oth:application/vnd.oasis.opendocument.text-web",
			".otp:application/vnd.oasis.opendocument.presentation-template",
			".ots:application/vnd.oasis.opendocument.spreadsheet-template",
			".ott:application/vnd.oasis.opendocument.text-template", ".owl:application/rdf+xml",
			".oxt:application/vnd.openofficeorg.extension", ".p:text/x-pascal", ".p10:application/pkcs10",
			".p12:application/x-pkcs12", ".p7b:application/x-pkcs7-certificates", ".p7s:application/pkcs7-signature",
			".pack:application/x-java-pack200", ".pak:application/x-pak", ".par2:application/x-par2",
			".pas:text/x-pascal", ".patch:text/x-patch", ".pbm:image/x-portable-bitmap", ".pcd:image/x-photo-cd",
			".pcf:application/x-cisco-vpn-settings", ".pcf.gz:application/x-font-pcf", ".pcf.z:application/x-font-pcf",
			".pcl:application/vnd.hp-pcl", ".pcx:image/x-pcx", ".pdb:chemical/x-pdb", ".pdc:application/x-aportisdoc",
			".pdf:application/pdf", ".pdf.bz2:application/x-bzpdf", ".pdf.gz:application/x-gzpdf",
			".pef:image/x-pentax-pef", ".pem:application/x-x509-ca-cert", ".perl:application/x-perl",
			".pfa:application/x-font-type1", ".pfb:application/x-font-type1", ".pfx:application/x-pkcs12",
			".pgm:image/x-portable-graymap", ".pgn:application/x-chess-pgn", ".pgp:application/pgp-encrypted",
			".php:application/x-php", ".php3:application/x-php", ".php4:application/x-php", ".pict:image/x-pict",
			".pict1:image/x-pict", ".pict2:image/x-pict", ".pickle:application/python-pickle",
			".pk:application/x-tex-pk", ".pkipath:application/pkix-pkipath", ".pkr:application/pgp-keys",
			".pl:application/x-perl", ".pla:audio/x-iriver-pla", ".pln:application/x-planperfect", ".pls:audio/x-scpls",
			".pm:application/x-perl", ".png:image/png", ".pnm:image/x-portable-anymap", ".pntg:image/x-macpaint",
			".po:text/x-gettext-translation", ".por:application/x-spss-por", ".pot:text/x-gettext-translation-template",
			".ppm:image/x-portable-pixmap", ".pps:application/vnd.ms-powerpoint", ".ppt:application/vnd.ms-powerpoint",
			".pptm:application/vnd.openxmlformats-officedocument.presentationml.presentation",
			".pptx:application/vnd.openxmlformats-officedocument.presentationml.presentation",
			".ppz:application/vnd.ms-powerpoint", ".prc:application/x-palm-database", ".ps:application/postscript",
			".ps.bz2:application/x-bzpostscript", ".ps.gz:application/x-gzpostscript", ".psd:image/vnd.adobe.photoshop",
			".psf:audio/x-psf", ".psf.gz:application/x-gz-font-linux-psf", ".psflib:audio/x-psflib",
			".psid:audio/prs.sid", ".psw:application/x-pocket-word", ".pw:application/x-pw", ".py:text/x-python",
			".pyc:application/x-python-bytecode", ".pyo:application/x-python-bytecode", ".qif:image/x-quicktime",
			".qt:video/quicktime", ".qtif:image/x-quicktime", ".qtl:application/x-quicktime-media-link",
			".qtvr:video/quicktime", ".ra:audio/vnd.rn-realaudio", ".raf:image/x-fuji-raf", ".ram:application/ram",
			".rar:application/x-rar", ".ras:image/x-cmu-raster", ".raw:image/x-panasonic-raw",
			".rax:audio/vnd.rn-realaudio", ".rb:application/x-ruby", ".rdf:application/rdf+xml",
			".rdfs:application/rdf+xml", ".reg:text/x-ms-regedit", ".rej:application/x-reject", ".rgb:image/x-rgb",
			".rle:image/rle", ".rm:application/vnd.rn-realmedia", ".rmj:application/vnd.rn-realmedia",
			".rmm:application/vnd.rn-realmedia", ".rms:application/vnd.rn-realmedia",
			".rmvb:application/vnd.rn-realmedia", ".rmx:application/vnd.rn-realmedia", ".roff:text/troff",
			".rp:image/vnd.rn-realpix", ".rpm:application/x-rpm", ".rss:application/rss+xml",
			".rt:text/vnd.rn-realtext", ".rtf:application/rtf", ".rtx:text/richtext", ".rv:video/vnd.rn-realvideo",
			".rvx:video/vnd.rn-realvideo", ".s3m:audio/x-s3m", ".sam:application/x-amipro", ".sami:application/x-sami",
			".sav:application/x-spss-sav", ".scm:text/x-scheme", ".sda:application/vnd.stardivision.draw",
			".sdc:application/vnd.stardivision.calc", ".sdd:application/vnd.stardivision.impress",
			".sdp:application/sdp", ".sds:application/vnd.stardivision.chart",
			".sdw:application/vnd.stardivision.writer", ".sgf:application/x-go-sgf", ".sgi:image/x-sgi",
			".sgl:application/vnd.stardivision.writer", ".sgm:text/sgml", ".sgml:text/sgml",
			".sh:application/x-shellscript", ".shar:application/x-shar", ".shn:application/x-shorten",
			".siag:application/x-siag", ".sid:audio/prs.sid", ".sik:application/x-trash",
			".sis:application/vnd.symbian.install", ".sisx:x-epoc/x-sisx-app", ".sit:application/x-stuffit",
			".siv:application/sieve", ".sk:image/x-skencil", ".sk1:image/x-skencil", ".skr:application/pgp-keys",
			".slk:text/spreadsheet", ".smaf:application/x-smaf", ".smc:application/x-snes-rom",
			".smd:application/vnd.stardivision.mail", ".smf:application/vnd.stardivision.math",
			".smi:application/x-sami", ".smil:application/smil", ".sml:application/smil", ".sms:application/x-sms-rom",
			".snd:audio/basic", ".so:application/x-sharedlib", ".spc:application/x-pkcs7-certificates",
			".spd:application/x-font-speedo", ".spec:text/x-rpm-spec", ".spl:application/x-shockwave-flash",
			".spx:audio/x-speex", ".sql:text/x-sql", ".sr2:image/x-sony-sr2", ".src:application/x-wais-source",
			".srf:image/x-sony-srf", ".srt:application/x-subrip", ".ssa:text/x-ssa",
			".stc:application/vnd.sun.xml.calc.template", ".std:application/vnd.sun.xml.draw.template",
			".sti:application/vnd.sun.xml.impress.template", ".stm:audio/x-stm",
			".stw:application/vnd.sun.xml.writer.template", ".sty:text/x-tex", ".sub:text/x-subviewer",
			".sun:image/x-sun-raster", ".sv4cpio:application/x-sv4cpio", ".sv4crc:application/x-sv4crc",
			".svg:image/svg+xml", ".svgz:image/svg+xml-compressed", ".swf:application/x-shockwave-flash",
			".sxc:application/vnd.sun.xml.calc", ".sxd:application/vnd.sun.xml.draw",
			".sxg:application/vnd.sun.xml.writer.global", ".sxi:application/vnd.sun.xml.impress",
			".sxm:application/vnd.sun.xml.math", ".sxw:application/vnd.sun.xml.writer", ".sylk:text/spreadsheet",
			".t:text/troff", ".t2t:text/x-txt2tags", ".tar:application/x-tar",
			".tar.bz:application/x-bzip-compressed-tar", ".tar.bz2:application/x-bzip-compressed-tar",
			".tar.gz:application/x-compressed-tar", ".tar.lzma:application/x-lzma-compressed-tar",
			".tar.lzo:application/x-tzo", ".tar.xz:application/x-xz-compressed-tar", ".tar.z:application/x-tarz",
			".tbz:application/x-bzip-compressed-tar", ".tbz2:application/x-bzip-compressed-tar", ".tcl:text/x-tcl",
			".tex:text/x-tex", ".texi:text/x-texinfo", ".texinfo:text/x-texinfo", ".tga:image/x-tga",
			".tgz:application/x-compressed-tar", ".theme:application/x-theme",
			".themepack:application/x-windows-themepack", ".tif:image/tiff", ".tiff:image/tiff", ".tk:text/x-tcl",
			".tlz:application/x-lzma-compressed-tar", ".tnef:application/vnd.ms-tnef", ".tnf:application/vnd.ms-tnef",
			".toc:application/x-cdrdao-toc", ".torrent:application/x-bittorrent", ".tpic:image/x-tga", ".tr:text/troff",
			".ts:application/x-linguist", ".tsv:text/tab-separated-values", ".tta:audio/x-tta",
			".ttc:application/x-font-ttf", ".ttf:application/x-font-ttf", ".ttx:application/x-font-ttx",
			".txt:text/plain", ".txz:application/x-xz-compressed-tar", ".tzo:application/x-tzo",
			".ufraw:application/x-ufraw", ".ui:application/x-designer", ".uil:text/x-uil", ".ult:audio/x-mod",
			".uni:audio/x-mod", ".uri:text/x-uri", ".url:text/x-uri", ".ustar:application/x-ustar", ".vala:text/x-vala",
			".vapi:text/x-vala", ".vcf:text/directory", ".vcs:text/calendar", ".vct:text/directory", ".vda:image/x-tga",
			".vhd:text/x-vhdl", ".vhdl:text/x-vhdl", ".viv:video/vivo", ".vivo:video/vivo", ".vlc:audio/x-mpegurl",
			".vob:video/mpeg", ".voc:audio/x-voc", ".vor:application/vnd.stardivision.writer", ".vst:image/x-tga",
			".wav:audio/x-wav", ".wax:audio/x-ms-asx", ".wb1:application/x-quattropro", ".wb2:application/x-quattropro",
			".wb3:application/x-quattropro", ".wbmp:image/vnd.wap.wbmp", ".wcm:application/vnd.ms-works",
			".wdb:application/vnd.ms-works", ".webm:video/webm", ".wk1:application/vnd.lotus-1-2-3",
			".wk3:application/vnd.lotus-1-2-3", ".wk4:application/vnd.lotus-1-2-3", ".wks:application/vnd.ms-works",
			".wma:audio/x-ms-wma", ".wmf:image/x-wmf", ".wml:text/vnd.wap.wml", ".wmls:text/vnd.wap.wmlscript",
			".wmv:video/x-ms-wmv", ".wmx:audio/x-ms-asx", ".wp:application/vnd.wordperfect",
			".wp4:application/vnd.wordperfect", ".wp5:application/vnd.wordperfect", ".wp6:application/vnd.wordperfect",
			".wpd:application/vnd.wordperfect", ".wpg:application/x-wpg", ".wpl:application/vnd.ms-wpl",
			".wpp:application/vnd.wordperfect", ".wps:application/vnd.ms-works", ".wri:application/x-mswrite",
			".wrl:model/vrml", ".wv:audio/x-wavpack", ".wvc:audio/x-wavpack-correction", ".wvp:audio/x-wavpack",
			".wvx:audio/x-ms-asx", ".x3f:image/x-sigma-x3f", ".xac:application/x-gnucash", ".xbel:application/x-xbel",
			".xbl:application/xml", ".xbm:image/x-xbitmap", ".xcf:image/x-xcf", ".xcf.bz2:image/x-compressed-xcf",
			".xcf.gz:image/x-compressed-xcf", ".xhtml:application/xhtml+xml", ".xi:audio/x-xi",
			".xla:application/vnd.ms-excel", ".xlc:application/vnd.ms-excel", ".xld:application/vnd.ms-excel",
			".xlf:application/x-xliff", ".xliff:application/x-xliff", ".xll:application/vnd.ms-excel",
			".xlm:application/vnd.ms-excel", ".xls:application/vnd.ms-excel",
			".xlsm:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
			".xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlt:application/vnd.ms-excel",
			".xlw:application/vnd.ms-excel", ".xm:audio/x-xm", ".xmf:audio/x-xmf", ".xmi:text/x-xmi",
			".xml:application/xml", ".xpm:image/x-xpixmap", ".xps:application/vnd.ms-xpsdocument",
			".xsl:application/xml", ".xslfo:text/x-xslfo", ".xslt:application/xml", ".xspf:application/xspf+xml",
			".xul:application/vnd.mozilla.xul+xml", ".xwd:image/x-xwindowdump", ".xyz:chemical/x-pdb",
			".xz:application/x-xz", ".w2p:application/w2p", ".z:application/x-compress", ".zabw:application/x-abiword",
			".zip:application/zip", ".zoo:application/x-zoo" };

	
	private static String endpoint;
	private static String accessKeyId;
	private static String accessKeySecret; 
	private static String bucketName;
	public static String PATH_TEST = "test/";
	public static String PATH_CONTRACT = "contract/";
	public static String PATH_CERTIFICATE = "certificate/";

//	static {
//		String endpoint = "oss-cn-shenzhen.aliyuncs.com";
//		String accessKeyId = "LTAIeg17b9nx3vic";
//		String accessSecret = "SAoyslpXHP327n6CG20sSrD9wsGXFp";
//		String bucketName = "bbp-test";
//		init(endpoint,accessKeyId,accessSecret,bucketName);
//	}
	//{"endpoint":"http://oss-cn-hangzhou.aliyuncs.com","accessKeyId":"LTAIeg17b9nx3vic","accessKeySecret":"SAoyslpXHP327n6CG20sSrD9wsGXFp","bucketName":"datafaceapi-test"}
	public static void init(String endpoint, String accessKeyId, String accessKeySecret, String bucketName) {
		AliOSSUtil.endpoint = endpoint;
		AliOSSUtil.accessKeyId = accessKeyId;
		AliOSSUtil.accessKeySecret = accessKeySecret;
		AliOSSUtil.bucketName = bucketName;
	}

	/**
	 * io流上传文件
	 * @param inputStream 文件io流
	 * @param dirPath 上传路径 使用UTF-8编码后长度必须在 1-1023字节之间，
	 * 而且不能包含回车、换行、以及xml1.0不支持的字符，同时也不能以“/”或者“\”开头。
	 * @param fileName 文件名称
	 * @return 返回上传成功的外网访问地址
	 * @throws Exception
	 */
	public static String uploadFile(InputStream inputStream, String dirPath, String fileName) throws Exception {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		String url = null;
		try {
			ObjectMetadata objectMeta = new ObjectMetadata();
			dirPath = dirPath == null || "".equals(dirPath) ? "/" : (dirPath.endsWith("/") ? dirPath : dirPath + "/");
			String contentType = AliOSSUtil.getContentType(fileName);
			if (null == contentType) {
				return null;
			}
			objectMeta.setContentType(contentType);
			// 注册client
			url = dirPath + fileName;
			//检查文件是否存在
			boolean found = ossClient.doesObjectExist(bucketName, url);
			if (found) {
				throw new OSSException("文件已存在");
			}
			PutObjectResult result = ossClient.putObject(bucketName, url, inputStream, objectMeta);
			System.err.println("上传文件结果" + result);
		} finally {
			ossClient.shutdown();
		}
		return url;
	}

	/**
	 * io流上传文件,允许重复上传到OSS,所以另外写了一个方法
	 * @param inputStream 文件io流
	 * @param dirPath 上传路径 使用UTF-8编码后长度必须在 1-1023字节之间，
	 * 而且不能包含回车、换行、以及xml1.0不支持的字符，同时也不能以“/”或者“\”开头。
	 * @param fileName 文件名称
	 * @return 返回上传成功的外网访问地址
	 * @throws Exception
	 */
	public static String uploadFileCanBeOverLoad(InputStream inputStream, String dirPath, String fileName) throws Exception {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		String url = null;
		try {
			ObjectMetadata objectMeta = new ObjectMetadata();
			dirPath = dirPath == null || "".equals(dirPath) ? "/" : (dirPath.endsWith("/") ? dirPath : dirPath + "/");
			String contentType = AliOSSUtil.getContentType(fileName);
			if (null == contentType) {
				return null;
			}
			objectMeta.setContentType(contentType);
			// 注册client
			url = dirPath + fileName;
			PutObjectResult result = ossClient.putObject(bucketName, url, inputStream, objectMeta);
			System.err.println("上传文件结果" + result);
		} finally {
			ossClient.shutdown();
		}
		return url;
	}

	public static void main(String[] args) {
		String test = "ssasdfasdfa.jpg";
		String[] arr = test.split("\\.");
		if(arr.length > 0){
			System.out.println(arr[arr.length - 1]);
		}else{
			System.out.println("error!");
		}
	}
	
	/**
	 * 本地问上传上传文件
	 * @param file 文件io流
	 * @param dirPath 上传路径
	 * @param fileName 文件名称
	 * @return 返回上传成功的外网访问地址
	 */
	public static String uploadFile(File file, String dirPath, String fileName) throws Exception {
		return uploadFile(new FileInputStream(file), dirPath, fileName);
	}
	

	/**
	 * 根据传入文件名获取文件ContentType
	 * @param fileName
	 * @return
	 */
	private static String getContentType(String fileName) {
		fileName = fileName.toLowerCase();
		String fileContentType = null;
		for (String contentType : AliOSSUtil.contentTypes) {
			String[] fileAttrs = contentType.split(":");
			String fileTypeName = fileAttrs[0];
			String fileType = fileAttrs[1];
			if (fileName.endsWith(fileTypeName)) {
				fileContentType = fileType;
				break;
			}
		}
		return fileContentType;
	}
	
	public static String downloadFile(String downloadPath, String fileName) {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		try {
			ossClient.getObject(new GetObjectRequest(bucketName, downloadPath), new File(fileName));
		}finally {
			ossClient.shutdown();
		}
		return "SUCCESS";
	}
	
	/**
	 * 检查文件是否存在
	 * @param fileFullPath 文件路径
	 */
	public static boolean doesObjectExist(String fileFullPath) {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		try {
			return ossClient.doesObjectExist(bucketName, fileFullPath);
		} finally {
			ossClient.shutdown();
		}
	}
	
	/**
	 * 获取文件外网访问路径
	 * @param fileName
	 * @param date 连接失效时间
	 * @return
	 */
	public static String getFileUrl(String fileName, Date date) {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		java.net.URL url = ossClient.generatePresignedUrl(bucketName, fileName, date);
		ossClient.shutdown();
		return url.toString();
	}

	/**
	 * 获取文件外网访问路径
	 * @param fileFullPath  文件路径
	 * @param second  链接有效时间(秒)
	 * @return 外网访问路径
	 */
	public static String getFileUrl(String fileFullPath, long second) {
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		//设置链接的超时时间
		Date expiration = new Date(System.currentTimeMillis()+ second * 1000);
		java.net.URL url = ossClient.generatePresignedUrl(bucketName, fileFullPath, expiration);
		return url.toString();
	}
	
	/**
	 * 获取指定目录下的100个文件
	 * @param dirPath 查看的目录
	 * @param isDelDir 是否排除目录只保留文件
	 * @param size 列出文件数量，最多不超过1000
	 */
	public static List<String> getDirFileList(String dirPath,Boolean isDelDir,Integer size){
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
		listObjectsRequest.setPrefix(dirPath);
		ObjectListing dirList = ossClient.listObjects(listObjectsRequest);
		List<String> files = new ArrayList<>();
		for (OSSObjectSummary objectSummary : dirList.getObjectSummaries()) {
			if(isDelDir) {
				if(objectSummary.getSize()<=0)
					continue;
			}
			files.add(objectSummary.getKey());
		}
		return files;
	}
	
	/**
	 * 有效期 按年
	 * @param years
	 * @return
	 */
	public static Date getNoEffictDateByYear(int years){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.add(Calendar.YEAR,years);
		return calendar.getTime();
	}
	
}
